package com.extraxue.singleton;

/*
 *  懒汉式
 *  只有当实例（单例）不存在的时候，才会初始化这个实例（单例）
 *  缺点，线程不安全(Mgr02)
 *  Mgr03:加synchronized锁,但是效率会下降
 */

public class Mgr03 {

    private static Mgr03 INSTANCE;

    private Mgr03(){

    }
    // 全局加线程锁
    public static synchronized Mgr03 getInstance()  {
        if (INSTANCE == null){

            try{
                Thread.sleep(1);
            } catch(InterruptedException e ){
                e.printStackTrace();
            }
            INSTANCE = new Mgr03();
        }
        return INSTANCE;
    }

    public static void main(String[] args) {
        for (int i = 0 ; i < 100 ; i ++){
            //Lamda表达式 , 实现的是Runable接口，里面只有一个方法：run()，所以可以省略
            new Thread(() -> {
                System.out.println(Mgr03.getInstance().hashCode());
            }).start();
        }
    }

}
